/*
 * @Descripttion: 表格通用状态样式
 * @version: 1.0.0
 * @Date: 2022-02-10
 */
import { formatDate } from '@tapui/utils/date'
import { STATE_TAG_TYPE_MAP } from '@/const/const'
export const mixin_table_style = {
  data() {
    return {
      stateKey: 'state', // 数据状态字段
      processingValue: 1, // 状态为执行中时的值
      finishDateKey: 'planfinishdate' // 计划完成日期字段
    }
  },
  computed: {
    // 是否逾期
    isOverDue() {
      return (rowData) => rowData[this.stateKey] === this.processingValue && new Date(rowData[this.finishDateKey]).getTime() < Date.now() - 24 * 60 * 60 * 1000
    },
    // 是否临期
    isApproach() {
      return (rowData) => {
        if (rowData[this.stateKey] !== this.processingValue) {
          return false
        }
        // 剩余7天提醒
        return Date.now() > new Date(rowData[this.finishDateKey]).getTime() - 6 * 24 * 60 * 60 * 1000
      }
    },
    // 逾期天数
    overDueDays() {
      return (rowData) => {
        const startDate = new Date(rowData[this.finishDateKey]).getTime()
        const endDate = Date.now() - 24 * 60 * 60 * 1000
        return Math.ceil((endDate - startDate) / (1000 * 3600 * 24))
      }
    },
    // 剩余天数
    approachDays() {
      return (rowData) => Math.ceil((new Date(rowData[this.finishDateKey]).getTime() - Date.now()) / (1000 * 3600 * 24)) + 1
    },
    // 状态标签类型
    stateTagType() {
      return (state) => STATE_TAG_TYPE_MAP[state] || ''
    }
  },
  methods: {
    /** 格式化日期 **/
    tlFormatDate(date) {
      return formatDate(new Date(date), 'yyyy-MM-dd')
    },
    /** 改变单元格样式 */
    doChangeCellStyle({ row, column, rowIndex, columnIndex }) {
      if (column.property === this.finishDateKey) {
        // 改变计划完成日期样式
        switch (true) {
          case this.isOverDue(row):
            return 'background: #fb5607;color: black;' // 逾期
          case this.isApproach(row):
            return 'background: #8338ec;color: black;' // 临期
        }
      }
    }
  }
}
